package cn.itcast.mp.plugins;

import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;

import java.util.Properties;


/**
 * 自定义MP执行分析插件
 */

/**
 * type ：指定要拦截的类型 -- 执行器Executor.class ;
 * method：指定要拦截的方法 -- update方法;
 * 即是对执行器中的更新方法进行拦截
 */
@Intercepts({@Signature( type= Executor.class,method = "update",args = {MappedStatement.class,Object.class})}) //
public class MyInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        //拦截方法，具体业务逻辑编写的位置
        return invocation.proceed(); //通过
    }

    @Override
    public Object plugin(Object target) {
        //创建target对象的代理对象,目的是将当前拦截器加入到该对象中
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        //属性设置--配置拦截器的一些属性
    }
}